

// // IOS 13.3 使用 DeviceMotionEvent.requestPermission 获取用户权限时，必须用户手动触发
// document.ontouchend = function () {
//     setDeviceMotion(() => {

//     }, (err) => {
//         alert(err);
//     })
// };



// // 搖一搖功能
// function addShake(cb) {
//     const maxRange = 60;
//     const minRange = 10;
//     let lastX = 0,
//         lastY = 0,
//         lastZ = 0;
//     let isShake = false;
//     function toShake(e) {
//         let motion = e.acceleration;
//         let { x, y, z } = motion;
//         let range = Math.abs(x - lastX) + Math.abs(y - lastY) + Math.abs(z - lastZ);
//         if (range > maxRange) {
//             isShake = true;
//         } else if (range < minRange && isShake) {
//             cb && cb(e);
//             isShake = false;
//         }
//         lastX = x;
//         lastY = y;
//         lastZ = z;
//     }
//     toShake = throttle(toShake);
//     window.addEventListener("devicemotion", toShake);
// }


// addShake((e) => {
//     alert("搖一搖");
// });


var Shake = function (options) {
    let { threshold, timeout, shakeEvent} = options;
    let lastX = 0,
        lastY = 0,
        lastZ = 0;
    
    function toShake(e) {
        let motion = e.acceleration;
        let { x, y, z } = motion;
        let speed = Math.abs(x - lastX) + Math.abs(y - lastY) + Math.abs(z - lastZ);
        if (speed > threshold) {
            shakeEvent&&shakeEvent(speed);
        }
        lastX = x;
        lastY = y;
        lastZ = z;
    }
    toShake = throttle(toShake,timeout);
    
    this.start = function () {
        console.log(threshold);
        console.log(timeout);
        setDeviceMotion(()=>{
            window.addEventListener("devicemotion", toShake);
        },(err)=>{
            alert(err);
        })
    }
    this.stop = function () {
        window.removeEventListener("devicemotion", toShake);
    }


    /* 
    获取权限函数 
    使用 DeviceMotionEvent.requestPermission 
    获取用户权限时，必须用户手动触发
    不能在初始化運行
    */
    function setDeviceMotion(cb, errCB) {
        if (!window.DeviceMotionEvent) {
            errCB && errCB("您的设备不支持加速检测");
            return;
        }

        if (typeof DeviceMotionEvent.requestPermission === "function") {
            // 在 IOS 13 之后
            DeviceMotionEvent.requestPermission()
                .then((permissionState) => {
                    if (permissionState === 'granted') {
                        cb && cb();
                    } else {
                        errCB && errCB("请同意权限使用");
                    }
                })
                .catch((err) => {
                    errCB && errCB(err);
                });
        } else {
            // 其他设备
            let timer = setTimeout(() => {
                errCB && errCB('请开启您设备中"动作和方向的权限"');
            }, 1000);
            window.addEventListener("devicemotion", (e) => {
                clearTimeout(timer);
            }, { once: true });
            cb && cb();
        }
    }

    // 节流函数
    function throttle(fn, interval = 200, start = true) {
        if (typeof fn !== "function") {
            return console.error("请传入一个函数");
        }
        let timer = 0;
        return function (...arg) {
            let _this = this;
            if (timer) {
                return;
            }
            start && fn.apply(_this, arg);
            timer = setTimeout(() => {
                (!start) && fn.apply(_this, arg);
                timer = 0;
            }, interval);
        }
    }
}
